package com.uatair.common.mqtt.util;
import okhttp3.*;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class HttpClientUtil {

    private static final OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .connectTimeout(5, TimeUnit.SECONDS)
            .readTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10, TimeUnit.SECONDS)
            .build();

    /**
     * 发送 JSON 格式的 POST 请求
     * @param url   目标URL
     * @param json  请求体（JSON字符串）
     * @return      响应内容
     */
    public static String doPostJson(String url, String json) {
        return doPostJson(url, json, null);
    }

    /**
     * 发送 JSON 格式的 POST 请求（自定义请求头）
     * @param url     目标URL
     * @param json    请求体（JSON字符串）
     * @param headers 自定义请求头（可为null）
     * @return        响应内容
     */
    public static String doPostJson(String url, String json, Map<String, String> headers) {
        try {
            // 1. 构造请求体
            RequestBody body = RequestBody.create(json, MediaType.parse("application/json"));

            // 2. 构造请求头
            Headers.Builder headersBuilder = new Headers.Builder();
            if (headers != null) {
                for (Map.Entry<String, String> entry : headers.entrySet()) {
                    headersBuilder.add(entry.getKey(), entry.getValue());
                }
            }

            // 3. 构造请求
            Request request = new Request.Builder()
                    .url(url)
                    .post(body)
                    .headers(headersBuilder.build())
                    .build();

            // 4. 发送请求并获取响应
            try (Response response = okHttpClient.newCall(request).execute()) {
                if (!response.isSuccessful()) {
                    throw new IOException("HTTP 请求失败，状态码: " + response.code());
                }
                return response.body() != null ? response.body().string() : null;
            }
        } catch (Exception e) {
            throw new RuntimeException("HTTP 请求异常: " + e.getMessage(), e);
        }
    }
}
